"""
1、有三个办公室，8为老师，8为老师随机分配到3个办公室
2、求100以内能被3整除的数，并将作为列表输出
3、列表[1, 2, 3, 4, 2, 1, 3, 7, 8, 2, 3, 5, 6] 将次列表去重，得到一个唯一元素的列表 # 不允许用强制类型转换
4、求斐波那契数列  1 1 2 3 5 8 ……
5、求100以内的质数（只能被1和他本身整除）
6、有一堆字符串，"aabbccddefg"，打印出不重复的字符串结果 # 不允许用类型转换
7、有一堆字符串，"welcome to super&test"，打印储super&test # 不能查字符的索引
8、有一堆字符串，"welcome to super&test"，打印出test&super ot 不允许使用reverse 和 reversed
9、有一堆字符串，"abcdef"，将首尾反转，，不能使用现有的函数或方法，不允许使用步长
10、有一堆字符串，"aabbccddefg"，输出abcdefg，不允许使用set
"""

# 1、有三个办公室，8为老师，8为老师随机分配到3个办公室
import random   # 需使用到random包，先导包
# 先创建数据
teachers = [1, 2, 3, 4, 5, 6, 7, 8]  # 老师
rooms = [[], [], []]        # 教室
# 遍历每位老师：
for teacher in teachers:
    # 随机获取一个教室
    n = random.randint(0, 2)
    # 将老师添加到教室内
    rooms[n].append(teacher)
print(rooms)

# 2、求100以内能被3整除的数，并将作为列表输出
# for循环
list1 = []
for i in range(1, 101):
    if i % 3 == 0:
        list1.append(i)
print(list1)
# 列表推导式
list2 = [i for i in range(1, 101) if i % 3 == 0]
print(list2)

# 3、列表[1, 2, 3, 4, 2, 1, 3, 7, 8, 2, 3, 5, 6] 将次列表去重，得到一个唯一元素的列表 # 不允许用强制类型转换
list1 = [1, 2, 3, 4, 2, 1, 3, 7, 8, 2, 3, 5, 6]
# 先创建一个空列表，用于接受去重后的元素
list2 = []
# for循环 遍历原始列表list1的每一个元素
for i in list1:
    # 判断：如果元素i 不在新的列表中，则执行下边的添加元素
    if i not in list2:
        list2.append(i)
print(list2)

# 4、求斐波那契数列  1 1 2 3 5 8 ……

a, glo_num = 1, 1     # 先定义两个变量
list1 = [a, glo_num]  # 将变量存入到列表中
for i in range(10):  # 循环10次
    a, glo_num = glo_num, a + glo_num  # 前面的 a, b都是最初的变量1，每循环一次，都会将后面的 b赋值给前面的a，a+glo_num 赋值给前面的b
    list1.append(glo_num)     # 然后将b的结果添加到list1中
print(list1)

list1 = [1, 1]
for i in range(10):
    res = list1[i]+list1[i+1]
    list1.append(res)
print(list1)

# 5、求100以内的质数（只能被1和他本身整除）
# 6、有一堆字符串，"aabbccddefg"，打印出不重复的字符串结果 # 不允许用类型转换
str1 = "aabbccddefg"   # 先将字符串定义个变量
str2 = ""               # str2 用于存放新的元素
for i in str1:          # 循环 sre1的元素
    if str1.count(i) == 1:  # 判断： 如果str1内的元素个数等于1，
        str2 = str2 + i     # 然后就存放到sre2里，相反，出现的元素大于1，就不存放到str2里
print(str2)
# 7、有一堆字符串，"welcome to super&test"，打印储supertest # 不能查字符的索引
str1 = "welcome to super&test"  # 先将字符串定义个变量
list1 = str1.split(" ")       # 使用字符串的分隔符,将字符串按照空格进行分割split()，赋值给到list1；分隔符内科自定义参数，也可以不传
print(list1)                # ['welcome', 'to', 'super&test']这一步可以不要，只是为了查看分割的情况
for i in list1:             # 循环遍历list1列表
    list2 = i.split("&")    # 然后将
    print(list2)            # ['welcome']['to']['super', 'test']
    if len(list2) > 1:      # 判断：如果list2的元素长度大于1，
        print("".join(list2))   # 则使用"".join()方法将他们拼接，并打印

str1 = "welcome to super&test"
list1 = str1.split(" ")
for i in list1:
    if "&" in i:
        res = i.replace("&","")     # replace()方法是用于替换字符的
        print(res)

# 8、有一堆字符串，"welcome to super&test"，打印出rset&repus ot ……(首尾反转)
str1 = "welcome to super&test"
# reverse()方法反转
str2 = list(str1)
print(str2)
str2.reverse()
str3 = "".join(str2)
print(str3)

# 循环遍历反转
str2 = ""
for i in str1:  # 将 str1里的每个字符串进行遍历
    str2 = i+str2   # 将过遍历出来的字符通过倒序的方式添加到str2中（因为在每次循环中，新的字符i是添加到str2的开头位置；例如：第一个循环出来的字符是w，然后放到str2内也是w；然后循环出来的第二个是e，到str2里就是ew……以此类推）
print(str2)

# 步长反转
str2 = str1[::-1]
print(str2)

# pop反转
list1 = list(str1)
str2 = ""
for i in str1:
    str2 = str2+list1.pop()
print(str2)

# 9、有一堆字符串，"abcdef"，将首尾反转，，不能使用现有的函数或方法，不允许使用步长
str1 = "abcdef"
str2 = ""
for i in range(len(str1)):
    str2 = str2 + str1[len(str1)-1 -i]
print(str2)

# 10、有一堆字符串，"aabbccddefg"，输出abcdefg，不允许使用set
str1 = "aabbccddefg"
str2 = ""
for i in str1:
    if i not in str2:
        str2 += i
print(str2)

# 使用set集合来输出
str2 = set(str1)    # 先将类型转换成set
print(str2)         # 打印一下查看类型是否被转换成{}类型
r = "".join(str2)   # 然后将字符进行拼接，查看一下
print(r)            # 这一段仅为了方便一步步的查看而已，完全用不到

res = "".join(sorted(str2))  # 使用 sorted()方法进行排序分类，具体可查看sorted方法的使用
print(res)
str3 = [4, 6, 2, 8, 1, 9, 3, 6, 7]
print(sorted(str3))     # [1, 2, 3, 4, 6, 6, 7, 8, 9]   就是这个sorted可以将一些字符按照想要的方式去排序，如正常的字母顺序、长度、数字，都可以
